package gameBasicElements;
import java.io.Serializable;
import java.util.LinkedList;

/**
 * @author Tomasz Wiatrowski
 *
 */
public interface Board extends Serializable
{
	
	/**
	 * @param pos Position
	 * @return empty list if pos is not captive, list with pos and positions connected to pos otherwise
	 */
	public LinkedList<Position> getCaptives(Position pos); 
	
	/**
	 * @param list LinkedList<Position>
	 * changes board at every position from list to null
	 */
	public void takeCaptives(LinkedList<Position> list);
	/**
	 * @param move Move (correct move)
	 * @return Board after move
	 */
	public Board update(Move move);
	/**
	 * @return board's size
	 */
	public int getSize();
	/**
	 * @param pos Position
	 * @return PlayerColor of stone at pos if there is a stone, null if there is not a stone
	 */
	public PlayerColor getPlayerColor(Position pos);
	/**
	 * @param pos Position
	 * @param color PlayerColor
	 * 
	 */
	public void setPlayerColor(Position pos, PlayerColor color);
	/**
	 * @param move Move
	 * @return not updated Board after move
	 */
	public Board placeStone(Move move);
	/**
	 * @param pos Position
	 * @return array with positions directly connected with pos
	 */
	public Position [] getNeighbours(Position pos);
	/**
	 * @param color PlayerColor
	 * @return number of captives taken by player
	 */
	public int captivesScore(PlayerColor color);
}
